//
//  WBStatusListViewModel.swift
//  desunireWeibo
//
//  Created by desunire on 2017/8/31.
//  Copyright © 2017年 desunire. All rights reserved.
//

import Foundation



/// 上拉刷新最大尝试次数
private let maxPullupTryTimes = 3


/// 微博数据列表视图模型
/*
 父类的选择
 
 - 如果类需要使用 `KVC` 或者字典转模型框架设置对象值，类就需要继承自 NSObject
 - 如果类只是包装一些代码逻辑(写了一些函数)，可以不用任何父类，好处：更加轻量级
 - 提示：如果用 OC 写，一律都继承自 NSObject 即可
 
 使命：负责微博的数据处理
 1. 字典转模型
 2. 下拉／上拉刷新数据处理
 */
class WBStatusListViewModel{
    
    lazy var statusList = [WBStatus]() //字典数组
  
    
    /// 上拉刷新错误次数
    private var pullupErrorTimes = 0
    
    //封装加载微博列表
    //是否成功
    func loadStatus(pullup:Bool,complete:@escaping (_ isSuccess:Bool)->()){
        // 判断是否是上拉刷新，同时检查刷新错误--不做网络请求
        if pullup && pullupErrorTimes > maxPullupTryTimes {
            complete(false)
            return
        }
        // since_id 取出数组中第一条微博的 id
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        // 上拉刷新，取出数组的最后一条微博的 id
        let max_id = !pullup ? 0 : (statusList.last?.id ?? 0)
        
        WBNetworkManager.shared.statusList(since_id:since_id,max_id:max_id){ (list, isSuccess) in
            //字典->模型
            guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list as Any) as? [WBStatus] else{
                complete(isSuccess)
                return
            }
            //下拉刷新微博数据
            // 视图模型创建完成
            print("刷新到 \(array.count) 条数据")
            
            // 2. 拼接数据
            if pullup {
                // 上拉加载结束后，将结果拼接在数组的末尾
                self.statusList += array
            } else {
                // 下拉刷新，应该将结果数组拼接在数组前面
                self.statusList = array + self.statusList
            }
            
            //判断上拉加载刷新的数据量
            if pullup && array.count == 0 {
                self.pullupErrorTimes += 1
                complete(false)
            }else{
                //TODO:图片缓存
                complete(isSuccess)
            }
        }
    }
    
    
    
}
